/*
 * 题目描述：根据通话记录计算账单
 *
 * 输入： 24个小时内每分钟的收费
 *       有N个通话记录
 *       N行通话记录（名字 mm:dd:hh:mm on-line或者off-line）
 *
 * 输出：用户姓名 月份
 *      通话开始时间 通话结束时间 耗时 费用
 *      。。。
 *      总费用
 *
 *      要求：用户姓名按照字母顺序显示，在通话记录中时间按照从小到大相邻on-line和off-line为有效通话需要收费，其他的
 *           不匹配的忽略不计入账单。
 *
 * 一直部分错误的原因：题目中说至少有一对的on-line off-line匹配的，理解成每个人至少有一个是匹配的（确实很容易理解错啊！），但是题目默认的是
 *                  如果一个用户没有合法的通话记录就不输出他的账单。。。
 *
 * 思路：通过map对于姓名进行字母自动排序，然后将每个用户的通话记录按照时间先后排序后，寻找相邻的on-line和off-line记录到用户的合法通话记录中
 *      ，最后通过一个小时一个小时的减去通话耗时长度来计算费用
 *
 */

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <cstdio>
#include <algorithm>
#include <iomanip>
using namespace std;

struct time{
    int month;
    int day;
    int hour;
    int minute;
};

int operator-(struct time t1, struct time t2){
    int minute1 = t1.day*24*60 + t1.hour*60 + t1.minute;
    int minute2 = t2.day*24*60 + t2.hour*60 + t2.minute;
    return minute1 - minute2;
}

ostream& operator<< (ostream &os, struct time t){
    printf("%02d:%02d:%02d", t.day, t.hour, t.minute);
    return os;
}

struct phonecall{
    struct time starttime;
    struct time endtime;
    int cost;
    int minutes;
};

struct record{
    struct time t;
    string tag;
};

struct user{
    string name;
    vector<phonecall> calls;
};

int cmpRecord(record &r1, record &r2){
    return (r1.t - r2.t)<0;
}




map<string, vector<record>> records;
vector<user> users;
int price[24] = {};

int computeCost(struct phonecall call){
    int total = call.endtime - call.starttime;
    int cost = 0;
    int base = call.starttime.hour % 24;
    //如果在同一个小时内
    if(call.starttime.day == call.endtime.day && call.starttime.hour == call.endtime.hour){
        cost = total * price[base];
    }else{
        //如果不在同一个小时内，先将开始时间初始化到整点
        cost = (60 - call.starttime.minute) * price[base];
        base = (base + 1) % 24;
        total -= 60 - call.starttime.minute;
        //一个小时一个小时的算
        while(true){
            if(total<60){
                cost += total * price[base];
                break;
            }else{
                cost += 60 * price[base];
                base = (base + 1) % 24;
                total -= 60;
            }
        }
    }
    return cost;
}

vector<phonecall> processRecords(vector<record> records){
    int isOnline = false;
    vector<phonecall> phonecalls;
    phonecall c;
    for(int i=0; i<records.size(); i++){
        if(records[i].tag == "on-line"){
            isOnline = true;
            c.starttime = records[i].t;
        }else{
            if(isOnline){
                c.endtime = records[i].t;
                c.cost = computeCost(c);
                c.minutes = c.endtime - c.starttime;
                phonecalls.push_back(c);
                isOnline = false;
            }
        }
    }
    return phonecalls;
}


int main() {
    //读入价格表
    for(int i=0; i<24; i++){
        cin >> price[i];
    }
    int total = 0;
    cin >> total;
    string name;
    record r;
    while(total--){
        cin >> name;
        scanf("%d:%d:%d:%d", &r.t.month, &r.t.day, &r.t.hour, &r.t.minute);
        cin >> r.tag;
        records[name].push_back(r);
    }
    user u;
    for(auto i=records.begin(); i!=records.end(); i++){
        u.name = i->first;
        sort(i->second.begin(), i->second.end(), cmpRecord);
        u.calls = processRecords(i->second);
        users.push_back(u);
    }
    for(int i=0; i<users.size(); i++){
        if(users[i].calls.size()<1){
            continue;
        }
        int month = users[i].calls[0].starttime.month;
        cout<< users[i].name << " ";
        printf("%02d\n",month);
        int sum = 0;
        for(int j=0; j<users[i].calls.size(); j++){
            sum += users[i].calls[j].cost;
            cout << users[i].calls[j].starttime
                 << " "
                 << users[i].calls[j].endtime
                 << " "
                 << users[i].calls[j].minutes
                 << " $";
            printf("%.2lf\n",users[i].calls[j].cost/100.0);
        }
        printf("Total amount: $%.2lf\n", sum / 100.0);
        sum = 0;
    }
    return 0;
}